-- Proyecto 1
-- CI3661 - Lenguajes de Programación I 
-- Carlos Chitty 07-41896
-- Martin Freytes 06-39553

type Mensaje a = [a]
type Codificador a b = [(a, b)]

-- 100% listo
obtenerCodificador :: Mensaje a -> Mensaje b -> Codificador a b
obtenerCodificador [] [] = []
obtenerCodificador (a:ax) (b:bx) 
 | length ax == length bx = [(a, b)] ++ obtenerCodificador ax bx
 | otherwise = error "los tamaños de los mensajes no coinciden!"

-- 5%
codificadorValido :: Codificador a b -> Bool
codificadorValido [] = True
codificarValido (x:xs) = True

-- 45%
codificarMensaje :: Mensaje a -> Codificador a b -> Mensaje b
codificarMensaje [] [] = []
codificarMensaje (x:xs) (y:ys) = h : codificarMensaje xs ys
 where h = snd y

info = putStrLn "Un mensaje:"
--main = do { info ; print (obtenerCodificador "abcd" [1,2,3,4,5]) }
main = do { info ; print ( codificarMensaje "hallo" [('h', 'a'),('a', 'h'),('l', 'o'),('l', 'o'),('o', 'l')] ) }
